Entfesseln Sie die Kraft von Pandas GroupBy für die Datenanalyse. Dieser Leitfaden untersucht Aggregations- und Transformationstechniken mit praktischen Beispielen.
Pandas GroupBy-Operationen meistern: Aggregation vs. Transformation
Pandas, der Eckpfeiler der Datenmanipulation in Python, bietet ein mächtiges Werkzeug zur Analyse und zum Verständnis von Daten: die GroupBy-Operation. Diese Funktion ermöglicht es Ihnen, Ihre Daten anhand gemeinsamer Merkmale in Gruppen zu segmentieren und dann Funktionen auf diese Gruppen anzuwenden, um Einblicke zu gewinnen, die sonst verborgen blieben. Dieser Artikel befasst sich eingehend mit zwei Schlüsseloperationen von GroupBy: Aggregation und Transformation, und bietet praktische Beispiele und Erklärungen, die für Datenexperten weltweit geeignet sind.
Das GroupBy-Konzept verstehen
Im Kern ist GroupBy ein Prozess, der drei Hauptschritte umfasst: Aufteilen der Daten basierend auf einem oder mehreren Kriterien in Gruppen, Anwenden einer Funktion auf jede Gruppe unabhängig und Kombinieren der Ergebnisse in einer neuen Datenstruktur. Diese "Split-Apply-Combine"-Strategie ist ein grundlegendes Konzept in der Datenanalyse und bietet einen flexiblen Rahmen für die Erkundung komplexer Datensätze.
Die Stärke von GroupBy liegt in seiner Fähigkeit, verschiedene Datentypen und Strukturen zu verarbeiten, was es in verschiedenen Bereichen anwendbar macht. Egal, ob Sie Verkaufsdaten aus mehreren Regionen, Sensormesswerte von verschiedenen Geräten oder Social-Media-Aktivitäten über demografische Gruppen hinweg analysieren, GroupBy kann Ihnen helfen, aussagekräftige Erkenntnisse zu extrahieren.
Aggregation: Daten innerhalb von Gruppen zusammenfassen
Aggregation ist der Prozess der Berechnung von zusammenfassenden Statistiken für jede Gruppe. Diese Statistiken liefern einen prägnanten Überblick über die Merkmale der Gruppe und ermöglichen es Ihnen, verschiedene Segmente Ihrer Daten zu vergleichen und gegenüberzustellen. Gängige Aggregationsfunktionen sind:
sum(): Berechnet die Summe der Werte innerhalb jeder Gruppe.mean(): Berechnet den Durchschnittswert innerhalb jeder Gruppe.median(): Berechnet den Medianwert innerhalb jeder Gruppe.min(): Findet den Minimalwert innerhalb jeder Gruppe.max(): Findet den Maximalwert innerhalb jeder Gruppe.count(): Zählt die Anzahl der Nicht-Null-Werte innerhalb jeder Gruppe.size(): Gibt die Größe jeder Gruppe zurück (einschließlich Nullwerte).std(): Berechnet die Standardabweichung innerhalb jeder Gruppe.var(): Berechnet die Varianz innerhalb jeder Gruppe.
Praktische Beispiele für Aggregation
Betrachten wir einen Datensatz mit internationalen Verkaufsdaten für ein hypothetisches E-Commerce-Unternehmen. Die Daten umfassen Informationen über die Produktkategorie, das Verkaufsland und den Umsatzbetrag.
import pandas as pd
# Beispieldaten
data = {
'Category': ['Electronics', 'Clothing', 'Electronics', 'Clothing', 'Home Goods', 'Electronics', 'Clothing', 'Home Goods'],
'Country': ['USA', 'UK', 'Canada', 'USA', 'Germany', 'UK', 'Canada', 'Germany'],
'Sales': [100, 50, 75, 60, 80, 90, 45, 70]
}
df = pd.DataFrame(data)
print(df)
Dies gibt Folgendes aus:
Category Country Sales
0 Electronics USA 100
1 Clothing UK 50
2 Electronics Canada 75
3 Clothing USA 60
4 Home Goods Germany 80
5 Electronics UK 90
6 Clothing Canada 45
7 Home Goods Germany 70
Beispiel 1: Gesamtumsatz pro Kategorie berechnen
Um den Gesamtumsatz für jede Produktkategorie zu berechnen, können wir die Methode groupby() gefolgt von der Aggregationsfunktion sum() verwenden.
category_sales = df.groupby('Category')['Sales'].sum()
print(category_sales)
Dies gibt Folgendes aus:
Category
Clothing 155
Electronics 265
Home Goods 150
Name: Sales, dtype: int64
Beispiel 2: Durchschnittlicher Umsatz pro Land berechnen
Ebenso können wir zur Berechnung des durchschnittlichen Umsatzes pro Land die Aggregationsfunktion mean() verwenden.
country_sales = df.groupby('Country')['Sales'].mean()
print(country_sales)
Dies gibt Folgendes aus:
Country
Canada 60.0
Germany 75.0
UK 70.0
USA 80.0
Name: Sales, dtype: float64
Beispiel 3: Mehrere Aggregationsfunktionen verwenden
Pandas ermöglicht es Ihnen, mehrere Aggregationsfunktionen gleichzeitig mit der Methode agg() anzuwenden. Dies bietet eine umfassende Zusammenfassung der Merkmale der Gruppe.
category_summary = df.groupby('Category')['Sales'].agg(['sum', 'mean', 'median', 'count'])
print(category_summary)
Dies gibt Folgendes aus:
sum mean median count
Category
Clothing 155 51.666667 50.0 3
Electronics 265 88.333333 90.0 3
Home Goods 150 75.000000 75.0 2
Beispiel 4: Benutzerdefinierte Aggregationsfunktionen
Sie können auch Ihre eigenen benutzerdefinierten Aggregationsfunktionen mit Lambda-Ausdrücken oder benannten Funktionen definieren. Dies ermöglicht Ihnen die Berechnung spezifischer Statistiken, die in den Standardaggregationsfunktionen nicht verfügbar sind.
# Benutzerdefinierte Funktion zur Berechnung der Spanne (max - min)
def custom_range(x):
return x.max() - x.min()
category_summary = df.groupby('Category')['Sales'].agg(['sum', 'mean', custom_range])
print(category_summary)
Dies gibt Folgendes aus:
sum mean custom_range
Category
Clothing 155 51.666667 15
Electronics 265 88.333333 25
Home Goods 150 75.000000 10
Transformation: Daten innerhalb von Gruppen ändern
Transformation hingegen beinhaltet die Änderung der Daten innerhalb jeder Gruppe basierend auf einer Berechnung. Im Gegensatz zur Aggregation, die für jede Gruppe einen zusammengefassten Wert zurückgibt, gibt die Transformation für jede Zeile in den Originaldaten einen Wert zurück, der jedoch basierend auf der Gruppe berechnet wird, zu der diese Zeile gehört. Transformationsoperationen erhalten den ursprünglichen Index und die Form des DataFrames.
Gängige Anwendungsfälle für Transformationen sind:
- Standardisierung von Daten innerhalb jeder Gruppe.
- Berechnung von Rang oder Perzentil innerhalb jeder Gruppe.
- Füllen fehlender Werte basierend auf Gruppenstatistiken.
Praktische Beispiele für Transformation
Lassen Sie uns mit unseren internationalen Verkaufsdaten fortfahren. Wir können Transformationen anwenden, um Berechnungen im Zusammenhang mit den Verkaufszahlen innerhalb jedes Landes durchzuführen.
Beispiel 1: Verkaufsdaten innerhalb jedes Landes standardisieren (Z-Score)
Die Standardisierung von Daten beinhaltet die Transformation von Werten, sodass sie einen Mittelwert von 0 und eine Standardabweichung von 1 aufweisen. Dies ist nützlich, um Daten über verschiedene Skalen und Verteilungen hinweg zu vergleichen. Wir können die Methode transform() zusammen mit einem Lambda-Ausdruck verwenden, um dies zu erreichen.
from scipy.stats import zscore
df['Sales_Zscore'] = df.groupby('Country')['Sales'].transform(zscore)
print(df)
Dies gibt Folgendes aus:
Category Country Sales Sales_Zscore
0 Electronics USA 100 1.000000
1 Clothing UK 50 -1.000000
2 Electronics Canada 75 1.000000
3 Clothing USA 60 -1.000000
4 Home Goods Germany 80 1.000000
5 Electronics UK 90 1.000000
6 Clothing Canada 45 -1.000000
7 Home Goods Germany 70 -1.000000
Die Spalte Sales_Zscore enthält nun die standardisierten Verkaufswerte für jedes Land. Werte über 0 liegen über dem durchschnittlichen Umsatz für dieses Land, und Werte unter 0 liegen darunter.
Beispiel 2: Umsatzrang pro Kategorie berechnen
Um den Rang jedes Verkaufs innerhalb seiner Kategorie zu berechnen, können wir die Methode rank() innerhalb der Funktion transform() verwenden.
df['Sales_Rank'] = df.groupby('Category')['Sales'].transform(lambda x: x.rank(method='dense'))
print(df)
Dies gibt Folgendes aus:
Category Country Sales Sales_Zscore Sales_Rank
0 Electronics USA 100 1.000000 3.0
1 Clothing UK 50 -1.000000 2.0
2 Electronics Canada 75 1.000000 1.0
3 Clothing USA 60 -1.000000 3.0
4 Home Goods Germany 80 1.000000 2.0
5 Electronics UK 90 1.000000 2.0
6 Clothing Canada 45 -1.000000 1.0
7 Home Goods Germany 70 -1.000000 1.0
Die Spalte Sales_Rank gibt den Rang jedes Verkaufs innerhalb seiner jeweiligen Kategorie an. Das Argument method='dense' stellt sicher, dass aufeinanderfolgende Ränge ohne Lücken zugewiesen werden.
Beispiel 3: Fehlende Werte basierend auf dem Gruppenmittelwert füllen
Führen wir einige fehlende Werte in den Verkaufsdaten ein und füllen sie dann basierend auf dem durchschnittlichen Umsatz für jedes Land.
import numpy as np
# Fehlende Werte einfügen
df.loc[[0, 3], 'Sales'] = np.nan
print(df)
# Fehlende Werte basierend auf dem Ländermittelwert füllen
df['Sales_Filled'] = df['Sales'].fillna(df.groupby('Country')['Sales'].transform('mean'))
print(df)
Der anfängliche DataFrame mit fehlenden Werten würde wie folgt aussehen:
Category Country Sales Sales_Zscore Sales_Rank
0 Electronics USA NaN 1.000000 3.0
1 Clothing UK 50 -1.000000 2.0
2 Electronics Canada 75 1.000000 1.0
3 Clothing USA NaN -1.000000 3.0
4 Home Goods Germany 80 1.000000 2.0
5 Electronics UK 90 1.000000 2.0
6 Clothing Canada 45 -1.000000 1.0
7 Home Goods Germany 70 -1.000000 1.0
Und nach dem Füllen der fehlenden Werte:
Category Country Sales Sales_Zscore Sales_Rank Sales_Filled
0 Electronics USA NaN 1.000000 3.0 NaN
1 Clothing UK 50 -1.000000 2.0 50.0
2 Electronics Canada 75 1.000000 1.0 75.0
3 Clothing USA NaN -1.000000 3.0 NaN
4 Home Goods Germany 80 1.000000 2.0 80.0
5 Electronics UK 90 1.000000 2.0 90.0
6 Clothing Canada 45 -1.000000 1.0 45.0
7 Home Goods Germany 70 -1.000000 1.0 70.0
Wichtiger Hinweis: Da es keinen vorhandenen Mittelwert für USA gab, sind die resultierenden Werte in Sales_Filled NaN. Die Behandlung von Grenzfällen wie diesem ist entscheidend für eine zuverlässige Datenanalyse und sollte bei der Implementierung berücksichtigt werden.
Aggregation vs. Transformation: Hauptunterschiede
Obwohl sowohl Aggregation als auch Transformation mächtige GroupBy-Operationen sind, dienen sie unterschiedlichen Zwecken und weisen deutliche Merkmale auf:
- Ausgabeform: Aggregation reduziert die Größe der Daten und gibt für jede Gruppe einen einzelnen Wert zurück. Transformation bewahrt die ursprüngliche Datengröße und gibt für jede Zeile einen transformierten Wert zurück.
- Zweck: Aggregation wird verwendet, um Daten zusammenzufassen und Einblicke in Gruppenmerkmale zu gewinnen. Transformation wird verwendet, um Daten innerhalb von Gruppen zu ändern, oft zur Standardisierung oder Normalisierung.
- Rückgabewert: Aggregation gibt einen neuen DataFrame oder eine Serie mit den aggregierten Werten zurück. Transformation gibt eine Serie mit den transformierten Werten zurück, die dann als neue Spalte zum ursprünglichen DataFrame hinzugefügt werden kann.
Die Wahl zwischen Aggregation und Transformation hängt von Ihren spezifischen analytischen Zielen ab. Wenn Sie Daten zusammenfassen und Gruppen vergleichen müssen, ist Aggregation die richtige Wahl. Wenn Sie Daten innerhalb von Gruppen ändern und gleichzeitig die ursprüngliche Datenstruktur beibehalten müssen, ist Transformation die bessere Option.
Fortgeschrittene GroupBy-Techniken
Über grundlegende Aggregation und Transformation hinaus bietet Pandas GroupBy eine Reihe fortgeschrittener Techniken für eine anspruchsvollere Datenanalyse.
Benutzerdefinierte Funktionen mit apply() anwenden
Die Methode apply() bietet die größte Flexibilität und ermöglicht es Ihnen, jede benutzerdefinierte Funktion auf jede Gruppe anzuwenden. Diese Funktion kann jede Operation ausführen, einschließlich Aggregation, Transformation oder sogar komplexere Berechnungen.
def custom_function(group):
# Berechnen Sie die Summe des Umsatzes für jede Kategorie in einer Gruppe, nur wenn mehr als eine Zeile in der Gruppe vorhanden ist
if len(group) > 1:
group['Sales_Sum'] = group['Sales'].sum()
else:
group['Sales_Sum'] = 0 # Oder ein anderer Standardwert
return group
df_applied = df.groupby('Country').apply(custom_function)
print(df_applied)
In diesem Beispiel definieren wir eine benutzerdefinierte Funktion, die die Summe des Umsatzes innerhalb jeder Gruppe (Land) berechnet. Die Methode apply() wendet diese Funktion auf jede Gruppe an, was zu einer neuen Spalte führt, die die Summe des Umsatzes für diese Gruppe enthält.
Wichtiger Hinweis: Die apply-Funktion kann rechenintensiver sein als andere Methoden. Optimieren Sie Ihren Code und erwägen Sie alternative Implementierungen bei der Arbeit mit riesigen Datensätzen.
Gruppieren nach mehreren Spalten
Sie können Ihre Daten nach mehreren Spalten gruppieren, um granularere Segmente zu erstellen. Dies ermöglicht es Ihnen, Daten basierend auf der Schnittmenge mehrerer Merkmale zu analysieren.
category_country_sales = df.groupby(['Category', 'Country'])['Sales'].sum()
print(category_country_sales)
Dies gruppiert die Daten sowohl nach Category als auch nach Country und ermöglicht es Ihnen, den Gesamtumsatz für jede Kategorie innerhalb jedes Landes zu berechnen. Dies bietet eine detailliertere Ansicht der Umsatzleistung über verschiedene Regionen und Produktlinien hinweg.
Gruppen durchlaufen
Für komplexere Analysen können Sie Gruppen mit einer for-Schleife durchlaufen. Dies ermöglicht Ihnen den Zugriff auf jede Gruppe einzeln und die Durchführung benutzerdefinierter Operationen darauf.
for name, group in df.groupby('Category'):
print(f"Category: {name}")
print(group)
Dies durchläuft jede Produktkategorie und gibt die entsprechenden Daten aus. Dies kann für benutzerdefinierte Analysen oder die Erstellung von Berichten für jede Kategorie nützlich sein.
Best Practices für die Verwendung von GroupBy
Um eine effiziente und effektive Nutzung von GroupBy zu gewährleisten, beachten Sie die folgenden Best Practices:
- Verstehen Sie Ihre Daten: Bevor Sie
GroupByanwenden, nehmen Sie sich Zeit, um Ihre Daten zu verstehen und die relevanten Gruppierungskriterien sowie Aggregations-/Transformationsfunktionen zu identifizieren. - Wählen Sie die richtige Operation: Überlegen Sie sorgfältig, ob Aggregation oder Transformation die richtige Wahl für Ihre analytischen Ziele ist.
- Für Leistung optimieren: Verwenden Sie bei großen Datensätzen vektorisierte Operationen und vermeiden Sie unnötige Schleifen, um Ihren Code zu optimieren.
- Fehlende Werte behandeln: Achten Sie auf fehlende Werte in Ihren Daten und behandeln Sie diese entsprechend mit Methoden wie
fillna()oderdropna(). - Dokumentieren Sie Ihren Code: Dokumentieren Sie Ihren Code klar, um den Zweck jeder
GroupBy-Operation und die Begründung für Ihre Entscheidungen zu erläutern.
Fazit
Pandas GroupBy ist ein mächtiges Werkzeug für die Datenanalyse, mit dem Sie Ihre Daten segmentieren, Funktionen auf jede Gruppe anwenden und wertvolle Erkenntnisse gewinnen können. Durch die Beherrschung von Aggregations- und Transformationstechniken können Sie das volle Potenzial Ihrer Daten freisetzen und ein tieferes Verständnis der zugrunde liegenden Muster und Trends erlangen. Ob Sie Verkaufsdaten, Sensormesswerte oder Social-Media-Aktivitäten analysieren, GroupBy kann Ihnen helfen, datengesteuerte Entscheidungen zu treffen und Ihre analytischen Ziele zu erreichen. Nutzen Sie die Kraft von GroupBy und heben Sie Ihre Datenanalysefähigkeiten auf die nächste Stufe.
Dieser Leitfaden hat einen umfassenden Überblick über die Pandas GroupBy-Operationen mit Schwerpunkt auf Aggregation vs. Transformation gegeben. Durch die Anwendung dieser Techniken auf internationale Daten können Datenwissenschaftler weltweit entscheidende Geschäftseinblicke aus verschiedenen Datensätzen gewinnen. Üben Sie, experimentieren Sie und passen Sie diese Techniken an Ihre spezifischen Bedürfnisse an, um das volle Potenzial von Pandas auszuschöpfen.